import pygame
from random import *

# 敌方轻甲飞机
class SmallEnemy(pygame.sprite.Sprite):
    def __init__(self, bg_size):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("images/enemy1.png").convert_alpha() # 加载敌方图片，并设置透明度
        self.destroy_images = [] #创建空列表存放敌方被消灭的动画
        self.destroy_images.extend([ \
            pygame.image.load("images/enemy1_down1.png").convert_alpha(), \
            pygame.image.load("images/enemy1_down2.png").convert_alpha(), \
            pygame.image.load("images/enemy1_down3.png").convert_alpha(), \
            pygame.image.load("images/enemy1_down4.png").convert_alpha() \
            ]) # 加载敌方被消灭的动画
        self.rect = self.image.get_rect() # 获取图片的位置
        self.width, self.height = bg_size[0], bg_size[1] # 获取背景尺寸，并赋值敌方的宽和高
        self.speed = 2 # 设置敌方的移动速度
        self.active = True # 设置敌方的活动状态
        # 随机初始化敌方的位置
        self.rect.left, self.rect.top = \
            randint(0, self.width - self.rect.width), \
            randint(-5 * self.height, 0)
        # 创建遮罩，用于碰撞检测
        self.mask = pygame.mask.from_surface(self.image)

    def move(self):
        # 敌人的移动方法
        # 如果敌人还没有移动到屏幕底部
        if self.rect.top < self.height:
            # 敌人向下移动
            self.rect.top += self.speed
        else:
            # 敌人已经移出屏幕，重置其位置
            self.reset()

    def reset(self):
        # 重置敌人的位置
        self.active = True # 重置活动状态为True
        self.rect.left, self.rect.top = \
            randint(0, self.width - self.rect.width), \
            randint(-5 * self.height, 0)

# 敌方中甲飞机
class MidEnemy(pygame.sprite.Sprite):
    energy = 8 # 敌方血量

    def __init__(self, bg_size):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load("images/enemy2.png").convert_alpha() # 加载敌方正常状态的图片
        self.image_hit = pygame.image.load("images/enemy2_hit.png").convert_alpha() # 加载敌方被击中的图片
        self.destroy_images = [] #创建空列表存放敌方被消灭的动画
        self.destroy_images.extend([ \
            pygame.image.load("images/enemy2_down1.png").convert_alpha(), \
            pygame.image.load("images/enemy2_down2.png").convert_alpha(), \
            pygame.image.load("images/enemy2_down3.png").convert_alpha(), \
            pygame.image.load("images/enemy2_down4.png").convert_alpha() \
            ]) # 加载敌方被消灭的动画
        self.rect = self.image.get_rect() # 获取图片位置
        self.width, self.height = bg_size[0], bg_size[1] # 获取背景尺寸，并赋值敌方宽高
        self.speed = 1 # 设置敌方速度
        self.active = True # 敌方的活动状态
        # 随机初始化敌方的位置
        self.rect.left, self.rect.top = \
            randint(0, self.width - self.rect.width), \
            randint(-10 * self.height, -self.height)
        self.mask = pygame.mask.from_surface(self.image)# 创建遮罩，用于碰撞检测
        self.energy = MidEnemy.energy # 初始化时设置敌人的血量
        self.hit = False # 设置敌人是否被击中的标志

    def move(self):
        # 敌人的移动方法
        # 如果敌人还没有移动到屏幕底部
        if self.rect.top < self.height:
            # 敌人向下移动
            self.rect.top += self.speed
        else:
            # 敌人已经移出屏幕，重置其位置
            self.reset()

    def reset(self):
        # 重置敌人的状态
        self.active = True
        # 重置敌人的血量
        self.energy = MidEnemy.energy
        # 随机重置敌人的位置
        self.rect.left, self.rect.top = \
            randint(0, self.width - self.rect.width), \
            randint(-10 * self.height, -self.height)

#敌方重甲飞机
class BigEnemy(pygame.sprite.Sprite):
    energy = 20 # 敌方血量

    def __init__(self, bg_size):
        pygame.sprite.Sprite.__init__(self)

        self.image1 = pygame.image.load("images/enemy3_n1.png").convert_alpha() # 加载敌方正常状态图片
        self.image2 = pygame.image.load("images/enemy3_n2.png").convert_alpha()
        self.image_hit = pygame.image.load("images/enemy3_hit.png").convert_alpha() # 加载敌方被击中的图片
        self.destroy_images = [] # 创建空列表存放敌方被消灭的动画
        self.destroy_images.extend([ \
            pygame.image.load("images/enemy3_down1.png").convert_alpha(), \
            pygame.image.load("images/enemy3_down2.png").convert_alpha(), \
            pygame.image.load("images/enemy3_down3.png").convert_alpha(), \
            pygame.image.load("images/enemy3_down4.png").convert_alpha(), \
            pygame.image.load("images/enemy3_down5.png").convert_alpha(), \
            pygame.image.load("images/enemy3_down6.png").convert_alpha() \
            ]) # 加载敌方被消灭的动画
        self.rect = self.image1.get_rect() # 获取图片位置
        self.width, self.height = bg_size[0], bg_size[1] # 获取背景尺寸，并赋值敌方宽高
        self.speed = 0.6 # 设置敌方速度
        self.active = True # 设置敌方活动状态
        # 随机初始化敌方的位置
        self.rect.left, self.rect.top = \
            randint(0, self.width - self.rect.width), \
            randint(-15 * self.height, -5 * self.height)
        self.mask = pygame.mask.from_surface(self.image1) # 创建遮罩用于碰撞检测
        self.energy = BigEnemy.energy # 初始化敌方的血量
        self.hit = False # 设置敌方是否被击中

    def move(self):
        # 敌人的移动方法
        # 如果敌人还没有移动到屏幕底部
        if self.rect.top < self.height:
            # 敌方向下移动
            self.rect.top += self.speed
        else:
            # 敌方已经移出屏幕，重置位置
            self.reset()

    def reset(self):
        self.active = True # 重置敌敌方状态
        self.energy = BigEnemy.energy # 重置敌方血量
        # 随机重置敌方的位置
        self.rect.left, self.rect.top = \
            randint(0, self.width - self.rect.width), \
            randint(-15 * self.height, -5 * self.height)

# BOSS
class BossEnemy(pygame.sprite.Sprite):
    energy = 50
    def __init__(self, bg_size):
        pygame.sprite.Sprite.__init__(self)

        self.image1 = pygame.image.load("images/boss1.png").convert_alpha() # 加载敌方正常状态图片
        self.image2 = pygame.image.load("images/boss1_1.png").convert_alpha()
        self.image_hit = pygame.image.load("images/boss2.png").convert_alpha() # 加载敌方被击中的图片
        self.destroy_images = [] # 创建空列表存放敌方被消灭的动画
        self.destroy_images.extend([ \
            pygame.image.load("images/boss2.png").convert_alpha(), \
            pygame.image.load("images/boss3.png").convert_alpha(), \
            pygame.image.load("images/boss4.png").convert_alpha(), \
            pygame.image.load("images/boss5.png").convert_alpha() \
            ]) # 加载敌方被消灭的动画
        self.rect = self.image1.get_rect() # 获取图片位置
        self.width, self.height = bg_size[0], bg_size[1] # 获取背景尺寸，并赋值敌方宽高
        self.speed = 0.5 # 设置敌方速度
        self.active = True # 设置敌方活动状态
        # 随机初始化敌方的位置
        self.rect.left, self.rect.top = \
            randint(0, self.width - self.rect.width), \
            randint(0,0)
        self.mask = pygame.mask.from_surface(self.image1) # 创建遮罩用于碰撞检测
        self.energy = BossEnemy.energy # 初始化敌方的血量
        self.hit = False # 设置敌方是否被击中

    def move(self):
        # 敌人的移动方法
        # 如果敌人还没有移动到屏幕底部
        if self.rect.top < self.height:
            # 敌方向下移动
            self.rect.top += self.speed
        else:
            # 敌方已经移出屏幕，重置位置
            self.reset()

    def reset(self):
        self.active = True # 重置敌敌方状态
        self.energy = BossEnemy.energy # 重置敌方血量
        # 随机重置敌方的位置
        self.rect.left, self.rect.top = \
            randint(0, self.width - self.rect.width), \
            randint(0,0)